var amqp = require('amqp');
var util = require('./util.js');


//创建一个连接 使用配置参数
/*var connection = amqp.createConnection({

	host: 'localhost',
	port: 5672,
	login: 'guest',
	password: 'guest',
	connectionTimeout: 10000,
	authMechanism: 'AMQPLAIN',
	vhost: '/', //连接到默认的vhost
	noDelay: true,
	ssl: {
		enabled: false
	}

});*/

//创建连接的第二种方式->使用url创建 ->amqp://guest:guest@localhost:5672/vhost ，最后一个参数为vhost名，不指定为默认的vhost
var connection = amqp.createConnection({
	url: "amqp://guest:guest@localhost:5672"
});


//连接就绪之后
connection.on('ready', async function() {

	console.log('connection is  ready...');

	//创建一个exchange
	let exchange = await util.createExchange(connection, 'debugExchange', {
		type: 'direct', //可以指定的类型有'direct', 'fanout', 'topic',不支持 'headers'
		durable: true, //是否持久化
		autoDelete: false, //是否自动删除（当与其绑定的queue全部被解绑时候）
		noDeclare: false,
		confirm: true //确认模式
	});

	//创建一个queue
	let queue = await util.createQueue(connection, 'q2', {
		durable: true,//是否持久化
		autoDelete: false,//消息被消费后是否自动删除
		noDeclare: false
	});

	//queue绑定到exchange->指定要绑定的exchange和routingKey
	queue.bind(exchange,'debug');

	//订阅某个queue，获取到message
	queue.subscribe((message, headers, deliveryInfo, messageObject)=>{
		console.log('reciver:'+message.data);
	});


	//使用前面定义的direct类型的exchange发布message到queue，（指定正确的routingKey）,callback在exchange设置为confirm模式的时候才会被执行
	exchange.publish('debug', 'nodejs-amqp', {}, result=>{

		console.log('publish success!!!'+result);
	});


});

//关闭connection
//connection.disconnect();
//
//
//其它api 可在npm仓库的amqp中间件自行查阅


